﻿#ifndef DELAYCAMERDEVICE_C_H
#define DELAYCAMERDEVICE_C_H
#include <windows.h>
#include "DelayDefine.h"
// 定义API导出宏
#ifdef DELAYCAMERDEVICE_EXPORTS
#define DELAYCAMERDEVICE_C_API __declspec(dllexport)
#else
#define DELAYCAMERDEVICE_C_API __declspec(dllimport)
#endif


// C接口函数声明
extern "C" {
    /**
     * @brief 设置设备连接回调函数
     * @param devConnFunc 设备连接回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetDevConnCallback(FunBakDevConn devConnFunc);

    /**
     * @brief 设置设备状态回调函数
     * @param devStsFunc 设备状态回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetDevStsCallback(FunBakDevSts devStsFunc);

    /**
     * @brief 设置校正状态回调函数
     * @param corrStsFunc 校正状态回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetCorrStsCallback(FunBakCorrSts corrStsFunc);

    /**
     * @brief 设置Flash状态回调函数
     * @param flashStsFunc Flash状态回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetFlashStsCallback(FunBakFlashSts flashStsFunc);

    /**
     * @brief 设置AD/IO回调函数
     * @param adIoFunc AD/IO回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetAdIoCallback(FunBakADIO adIoFunc);

    /**
     * @brief 设置IP状态回调函数
     * @param setIPStsFunc IP状态回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetIPStsCallback(FunBakSetIPSts setIPStsFunc);

    /**
     * @brief 设置命令同步回调函数
     * @param cmdSameFunc 命令同步回调函数指针
     */
    DELAYCAMERDEVICE_C_API void SetCmdSameCallback(FunBakCmdSame cmdSameFunc);

    /**
     * @brief 获取设备IP信息（字符串格式）
     * @param ip 输出参数，设备IP地址
     * @param mask 输出参数，子网掩码
     * @param gate 输出参数，网关地址
     * @param port 输出参数，端口号
     */
    DELAYCAMERDEVICE_C_API void GetIpInfo(char* ip, char* mask, char* gate, int* port);

    /**
     * @brief 设置设备IP信息（字符串格式）
     * @param ip 设备IP地址
     * @param mask 子网掩码
     * @param gate 网关地址
     * @param port 端口号
     */
    DELAYCAMERDEVICE_C_API void SetIpInfo(const char* ip, const char* mask, const char* gate, int port);

    /**
     * @brief 获取设备IP信息（整数格式）
     * @param ip 输出参数，设备IP地址（数组形式，4个整数）
     * @param mask 输出参数，子网掩码（数组形式，4个整数）
     * @param gate 输出参数，网关地址（数组形式，4个整数）
     * @param port 输出参数，端口号
     */
    DELAYCAMERDEVICE_C_API void GetIpInfo2(int* ip, int* mask, int* gate, int* port);

    /**
     * @brief 设置设备IP信息（整数格式）
     * @param ip 设备IP地址（数组形式，4个整数）
     * @param mask 子网掩码（数组形式，4个整数）
     * @param gate 网关地址（数组形式，4个整数）
     * @param port 端口号
     */
    DELAYCAMERDEVICE_C_API void SetIpInfo2(int* ip, int* mask, int* gate, int port);

    /**
     * @brief 检查TCP连接是否已打开
     * @return 已打开返回非零，未打开返回零
     */
    DELAYCAMERDEVICE_C_API int IsOpenTcp();

    /**
     * @brief 打开TCP连接
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int OpenTcp();

    /**
     * @brief 关闭TCP连接
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int CloseTcp();

    /**
     * @brief 获取设备状态
     * @return 设备状态码
     */
    DELAYCAMERDEVICE_C_API int GetDevSts();

    /**
     * @brief 设置校正参数
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int SetCorrect();

    /**
     * @brief 获取上传信息
     * @param time 是否包含时间信息
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int GetUpInfo(int time);

    /**
     * @brief 设置Flash参数
     * @param inst Flash参数结构体指针
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int SetFlash(str_Flash* inst);

    /**
     * @brief 设置设备参数
     * @param inst 设备参数结构体指针
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int SetArgs(str_Args* inst);

    /**
     * @brief 设置IP参数
     * @param inst IP参数结构体指针
     * @return 成功返回0，失败返回错误码
     */
    DELAYCAMERDEVICE_C_API int SetIP(str_IP* inst);
}

#endif // DELAYCAMERDEVICE_C_H